package com.zm.oes.mapper;

import com.zm.oes.entity.Admin;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 定义了一个AdminMapper的接口，用于管理管理员（Admin）对象在数据库中的CRUD操作
 */
@Mapper
public interface AdminMapper {

    /**
     * 该方法用于查询数据库中所有管理员记录
     * 通过@Select注解指定了查询语句，返回类型为Admin对象的List集合
     */
    @Select("select adminName,sex,tel,email,cardId,role from `admin`")
    public List<Admin> findAll();

    /**
     * 该方法用于根据管理员ID查找管理员记录
     * 通过@Select注解指定了查询语句，查询admin表中与给定adminId匹配的记录，返回类型为Admin对象
     */
    @Select("select adminId,adminName,sex,tel,email,cardId,role,pwd from `admin` where adminId = #{adminId}")
    public Admin findById(Integer adminId);

    /**
     * 该方法用于根据管理员ID删除管理员记录
     * 通过@Delete注解指定了删除语句，删除admin表中与给定adminId匹配的记录，返回删除记录的数量
     */
    @Delete("delete from `admin` where adminId = #{adminId}")
    public int deleteById(int adminId);

    /**
     * 该方法用于更新管理员记录
     * 通过@Update注解指定了更新语句，根据adminId更新admin表中的记录为给定的Admin对象，返回更新记录的数量
     */
    @Update("update `admin` set adminName = #{adminName},sex = #{sex}," +
            "tel = #{tel}, email = #{email},pwd = #{pwd},cardId = #{cardId},role = #{role} " +
            "where adminId = #{adminId}")
    public int update(Admin admin);

    /**
     * 这个方法用于向数据库中添加新的管理员记录
     * 通过@Insert注解指定了插入语句，将给定的Admin对象插入到admin表中，返回插入记录的数量
     * 使用@Options注解来指定自动生成的主键的属性，以便在插入后可以获取新插入记录的主键值
     */
    @Options(useGeneratedKeys = true,keyProperty = "adminId")
    @Insert("insert into `admin`(adminName,sex,tel,email,pwd,cardId,role) " +
            "values(#{adminName},#{sex},#{tel},#{email},#{pwd},#{cardId},#{role})")
    public int add(Admin admin);

}
